// 路由守卫（权限路由设置）
// import router, { asyncRoutes, constantRoutes } from '@/router/index.js'
import router from '@/router'
import store from '@/store/index.js'
import nprogress from 'nprogress'
import 'nprogress/nprogress.css'
// import { getUserInfo } from './api/user'

// 设置白名单
const whiteList = ['/login', '/404']
// 前置守卫
router.beforeEach(async(to, from, next) => {
  // 进度条
  nprogress.start()
  // 判断token有没有
  if (store.getters.token) {
    if (to.path === '/login') {
      next('/')
    } else {
      if (!store.getters.userid) {
        // 第一种写法
        // // 获取用户详情，里面包含路由的表示，需要通过路由标识和动态理由对比
        // const { roles: { menus }} = await store.dispatch('user/getUserInfo')
        // // 对比动态路由和理由标识对比，返回含有路由标识的动态理由
        // const routes = asyncRoutes.filter((item) => menus.includes(item.name))
        // router.addRoutes([
        //   ...routes,
        //   { path: '*', redirect: '/404', hidden: true }])// 路由守卫添加动态路由
        // router.options.routes = [...constantRoutes, ...routes]// 保证现有开发，页面正常展示
        // return next(to.path)
        // 第二种写法
        const { roles: { menus }} = await store.dispatch('user/getUserInfo')
        // 过滤
        const routes = await store.dispatch('permission/filterRoutes', menus)
        // 添加路由
        router.addRoutes([...routes, { path: '*', redirect: '/404', hidden: true }])
        next(to.path)
      } else {
        next()
      }
    }
  } else {
    if (whiteList.indexOf(to.path) > -1) {
      next()
    } else {
      // 不是登陆页跳转到登陆页
      next('/login')
    }
  }
  //   强制关闭进度条
  nprogress.done()
})
// 后置守卫
router.afterEach((to, from) => {
  // ...
  nprogress.done()
})
